12-4 LO

若要事先配置(Pre-Allocate)空的異質陣列,可用 cell 指令,例如:

Example 1: 12-異質陣列/cellAllocate01.mE = cell(4, 3) % 事先配置一個 4×3 空的異質陣列 E = [] [] [] [] [] [] [] [] [] [] [] []

若要測試某一變數是否為異質陣列,可用 iscell 指令,例如:

Example 2: 12-異質陣列/iscell01.mC = {[1,2,3]; 'This is a test.'}; iscell(C) ans = 1

在上例中,iscell 指令的執行結果是傳回值 1,代表變數 A 是一個異質陣列,若傳回值 0,則代表不是異質陣列。

Hint
在 MATLAB 中,以“is”為字首的指令大部分是檢視指令,若檢視結果為真,則回傳數值 1,否則就回傳數值 0,類似的指令有 ischar、isstr、isnumeric、isobject、issparse、isnan、isfinite、isinf、iscellstr、isvarname、iskeyword 等。

num2cell 指令可將一數值陣列轉換成異質陣列, 其使用語法為:

C = num2cell(A, dim)

其中 dim 是代表 「被切割」的維度,若不指定,則將每個元素視為異質陣列裡面的一個 1×1 矩陣,例如:

Example 3: 12-異質陣列/num2cell01.mA = [1 2 3;4 5 6]; % 建立的一個數值陣列 A C = num2cell(A) % 將數值陣列 A 轉成異質陣列 C C = [1] [2] [3] [4] [5] [6]

若要將數值陣列 A 中的每一直行, 轉成異質陣列 D 的元素,可輸入如下:

Example 4: 12-異質陣列/num2cell02.mA = [1 2 3;4 5 6]; % 建立的一個數值陣列 A D = num2cell(A, 1) % 1 代表「橫列被切割」 D = [2x1 double] [2x1 double] [2x1 double]

欲將數值陣列 A 的每一橫列, 轉成異質陣列 E 的元素,可輸入如下:

Example 5: 12-異質陣列/num2cell03.mA = [1 2 3;4 5 6]; % 建立的一個數值陣列 A E = num2cell(A, 2) % 2 代表「直行被切割」 E = [1x3 double] [1x3 double]

struct2cell 指令可將一結構陣列的所有欄位值轉換成異質陣列。(有關於結構陣列的說明,請參考本書下一章「結構陣列」。)例如:

Example 6: 12-異質陣列/struct2cell01.mstudent.name = 'Tim'; student.age = 8; sCell = struct2cell(student) sCell = 'Tim' [8]

另外有一個 cell2struct 指令,可以將異值陣列轉換為結構陣列,詳細說明請參考本書的下一章「結構陣列」。

若欲將一結構陣列的某一欄位值轉換成異質陣列,可使用 deal 指令,例如:

Example 7: 12-異質陣列/deal01.mS = struct('name',{'Tim','Annie'},'age', {8,5}); [sCell{1:length(S)}] = deal(S.name) sCell = 'Tim' 'Annie'

deal 指令的輸入及輸出引述需有相同個數,因此在上例中,sCell{1:length(S)} 的作用即是產生以逗點分開的輸出變數列。善用 deal 指令,可達成事半功倍之效,例如,欲列出 MATLAB 根目錄下所有目錄(不含檔案),可輸出如下:

Example 8: 12-異質陣列/deal02.mdirInfo = dir(matlabroot); % 列出 MATLAB 的根目錄的各種資訊 n = length(dirInfo); % 檔案及目錄的個數 [fileAndDir{1:n}] = deal(dirInfo.name); % fileAndDir 包含各檔案及目錄名稱 dirs = fileAndDir([dirInfo.isdir]) % dirs 包含各目錄名稱 dirs = Columns 1 through 6 '.' '..' 'appdata' 'bin' 'bugreport' 'etc' Columns 7 through 11 'examples' 'extern' 'help' 'java' 'lib' Columns 12 through 16 'licenses' 'mcr' 'notebook' 'polyspace' 'remote' Columns 17 through 21 'resources' 'rtw' 'runtime' 'simulink' 'stateflow' Columns 22 through 25 'sys' 'toolbox' 'ui' 'uninstall'


MATLAB程式設計:入門篇